# 1.使用按照要求，使用cifar2数据集完成cnn处理
from keras.preprocessing.image import ImageDataGenerator
from keras import Sequential, layers, activations, optimizers, losses

# (1)数据管道处理
# ①使用数据管道获取文件
img_train = ImageDataGenerator(rescale=1.0 / 255).flow_from_directory(directory='./cifar2/train', target_size=(32, 32),
                                                                      class_mode='binary')
img_test = ImageDataGenerator(rescale=1.0 / 255).flow_from_directory(directory='./cifar2/test', target_size=(32, 32),
                                                                     class_mode='binary')
# ②并按照文件名称进行分类
# ③将训练集和测试集数据进行缓存处理
# (2)模型处理
model = Sequential([
    layers.Conv2D(filters=32, kernel_size=(3, 3), activation=activations.relu),
    layers.MaxPooling2D(),
    layers.Conv2D(filters=64, kernel_size=(5, 5), activation=activations.relu),
    layers.MaxPooling2D(),
    layers.Flatten(),
    layers.Dense(units=128, activation=activations.relu),
    layers.Dropout(0.1),
    layers.Dense(units=1, activation=activations.sigmoid)
])
# ①添加一个3*3卷积，输出32通道，使用最大池化处理
# ②添加一个5*5卷积，输出64通道，使用最大池化处理
# ③按照0.1比例失活处理后，将数据展平（全连接）
# ④做全连接处理，使用二分类处理
# ⑤编译模型，使用adam优化
model.compile(optimizer=optimizers.Adam(), loss=losses.binary_crossentropy, metrics='acc')

# ⑥训练模型
model.fit(img_train, batch_size=100, epochs=1)

# ⑦使用测试集作为验证集，打印最终结果
model.evaluate(img_test)
